package com.zf.nio.channel;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

/**
 * 分散（scatter）从 Channel 中读取是指在读操作时将读取的数据写入多个 buffer 中。
 * 因此，Channel 将从 Channel 中读取的数据“分散（scatter）”到多个 Buffer 中
 * <p>
 * read()方法按照 buffer 在数组中的顺序将从 channel 中读取的数据写入到 buffer，当
 * 一个 buffer 被写满后，channel 紧接着向另一个 buffer 中写
 *
 * @author Zhou Feng
 */
public class ScatterReadDemo01 {
    public static void main(String[] args) throws IOException {
        FileChannel fileChannel = FileChannel.open(Paths.get("d:\\a.txt"), StandardOpenOption.READ, StandardOpenOption.WRITE);
        try (fileChannel){
            ByteBuffer header = ByteBuffer.allocate(2);
            ByteBuffer body = ByteBuffer.allocate(108);
            ByteBuffer[] bufferArray = {header, body};
            //read()方法按照 buffer 在数组中的顺序将从 channel 中读取的数据写入到 buffer，当
            //一个 buffer 被写满后，channel 紧接着向另一个 buffer 中写
            fileChannel.read(bufferArray);
            fileChannel.close();
        }

    }
}
